class StrAdd(str):

    # 重新定义该类的对象的加法运算逻辑
    def __add__(self, other):
        # 算术运算
        #  __add__(self, other)    +   x + y（由运算符左侧的对象 x 触发）       加法运算
        return len(self) + len(other)


s1 = StrAdd("ABC")
s2 = StrAdd("EFG")

# 默认字符串相加是2个字符串拼接
# 相当于调用:s1.__add__(s2)
print(s1 + s2)  # 6

print(s1 + "Python")  # 9 # 使用的是加法符号(+)前面的对象的 __add__ 方法
print("FishC" + s2)  # FishCEFG

# 算术运算
#  __add__(self, other)    +   x + y（由运算符左侧的对象 x 触发）       加法运算
#  __add__              ：加
#  __sub__              ：减
#  __mul__              ：乘
#  __truediv__          ：除
#  __floordiv__         ：地板除
#  __mod__              ：取模
#  __pow__              ：幂运算

# 反算术运算
#  __radd__(self, other)    +   x + y（由运算符右侧的对象 y 触发）       加法运算


# 增强赋值运算
#  __iadd__(self, other)    +=   x += y（由运算符左侧的对象 x 触发）       加法运算
